package main //声明本文件的package名
import "fmt" //import语言的fmt库——用于输出
func main() {
fmt.Println("hello world")
}
解释执行(实际是编译成a.out再执行. $go run hello.go hello world 编译执行 $go build hello.go $ls hello hello.go $./hello hello world
package main
import "fmt"
import "math"
func main() {
fmt.Println("hello world")
fmt.Printf("%tn", 1==2)
fmt.Printf("二进制:%bn", 255)
fmt.Printf("八进制:%on", 255)
fmt.Printf("十六进制:%Xn", 255)
fmt.Printf("十进制:%dn", 255)
fmt.Printf("浮点数:%fn", math.Pi)
fmt.Printf("字符串:%sn", "hello world")
}
//声明初始化一个变量 var x int = 100 var str string = "hello world"</pre> //声明初始化多个变量 var i, j, k int = 1, 2, 3 //不用指明类型,通过初始化值来推导 var b = true //bool型
const s string = "hello world" const pi float32 = 3.1415926
func main() {
var a [5]int
fmt.Println("array a:", a)
a[1] = 10
a[3] = 30
fmt.Println("assign:", a)
fmt.Println("len:", len(a))
b := [5]int{1, 2, 3, 4, 5}
fmt.Println("init:", b)
var c [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
c[i][j] = i + j
}
}
fmt.Println("2d: ", c)
}
a := [5]int{1, 2, 3, 4, 5}
b := a[2:4] // a[2] 和 a[3],但不包括a[4]
fmt.Println(b)
b = a[:4] // 从 a[0]到a[4],但不包括a[4]
fmt.Println(b)
b = a[2:] // 从 a[2]到a[4],且包括a[2]
fmt.Println(b)
//if 语句
if x % 2 == 0 {
//...
}
//if - else
if x % 2 == 0 {
//偶数...
} else {
//奇数...
}
//多分支
if num < 0 {
//负数
} else if num == 10 {
//零
} else {
//正数
}
switch i {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4,5,6:
fmt.Println("four, five, six")
default:
fmt.Println("invalid value!")
}
//经典的for语句 init; condition; post
for i := 0; i<10; i++{
fmt.Println(i)
}
//精简的for语句 condition
i := 1
for i<10 {
fmt.Println(i)
i++
}
//死循环的for语句 相当于for(;;)
i :=1
for {
if i>10 {
break
}
i++
}
func main(){
m := make(map[string]int) //使用make创建一个空的map
m["one"] = 1
m["two"] = 2
m["three"] = 3
fmt.Println(m) //输出 map[three:3 two:2 one:1] (顺序在运行时可能不一样)
fmt.Println(len(m)) //输出 3
v := m["two"] //从map里取值
fmt.Println(v) // 输出 2
delete(m, "two")
fmt.Println(m) //输出 map[three:3 one:1]
m1 := map[string]int{"one": 1, "two": 2, "three": 3}
fmt.Println(m1) //输出 map[two:2 three:3 one:1] (顺序在运行时可能不一样)
for key, val := range m1{
fmt.Printf("%s => %d n", key, val)
/*输出:(顺序在运行时可能不一样)
three => 3
one => 1
two => 2*/
}
}
var i int = 1
var pInt *int = &i
//输出:i=1 pInt=0xf8400371b0 *pInt=1
fmt.Printf("i=%dtpInt=%pt*pInt=%dn", i, pInt, *pInt)
*pInt = 2
//输出:i=2 pInt=0xf8400371b0 *pInt=2
fmt.Printf("i=%dtpInt=%pt*pInt=%dn", i, pInt, *pInt)
i = 3
//输出:i=3 pInt=0xf8400371b0 *pInt=3
fmt.Printf("i=%dtpInt=%pt*pInt=%dn", i, pInt, *pInt)
var p *[]int = new([]int) // 为切片结构分配内存;*p == nil;很少使用 var v []int = make([]int, 10) // 切片v现在是对一个新的有10个整数的数组的引用 // 不必要地使问题复杂化: var p *[]int = new([]int) fmt.Println(p) //输出:&[] *p = make([]int, 10, 10) fmt.Println(p) //输出:&[0 0 0 0 0 0 0 0 0 0] fmt.Println((*p)[2]) //输出: 0 // 习惯用法: v := make([]int, 10) fmt.Println(v) //输出:[0 0 0 0 0 0 0 0 0 0]
package main
import "fmt"
func max(a int, b int) int { //注意参数和返回值是怎么声明的
if a > b {
return a
}
return b
}
func main(){
fmt.Println(max(4, 5))
}
package main
import "fmt"
func main(){
v, e := multi_ret("one")
fmt.Println(v,e) //输出 1 true
v, e = multi_ret("four")
fmt.Println(v,e) //输出 0 false
//通常的用法(注意分号后有e)
if v, e = multi_ret("four"); e {
// 正常返回
}else{
// 出错返回
}
}
func multi_ret(key string) (int, bool){
m := map[string]int{"one": 1, "two": 2, "three": 3}
var err bool
var val int
val, err = m[key]
return val, err
}
func sum(nums ...int) {
fmt.Print(nums, " ") //输出如 [1, 2, 3] 之类的数组
total := 0
for _, num := range nums { //要的是值而不是下标
total += num
}
fmt.Println(total)
}
func main() {
sum(1, 2)
sum(1, 2, 3)
//传数组
nums := []int{1, 2, 3, 4}
sum(nums...)
}
func nextNum() func() int {
i,j := 1,1
return func() int {
var tmp = i+j
i, j = j, tmp
return tmp
}
}
//main函数中是对nextNum的调用,其主要是打出下一个斐波拉契数
func main(){
nextNumFunc := nextNum()
for i:=0; i<10; i++ {
fmt.Println(nextNumFunc())
}
}
func fact(n int) int {
if n == 0 {
return 1
}
return n * fact(n-1)
}
func main() {
fmt.Println(fact(7))
}
type Person struct {
name string
age int
email string
}
func main() {
//初始化
person := Person{"Tom", 30, "tom@gmail.com"}
person = Person{name:"Tom", age: 30, email:"tom@gmail.com"}
fmt.Println(person) //输出 {Tom 30 tom@gmail.com}
pPerson := &person
fmt.Println(pPerson) //输出 &{Tom 30 tom@gmail.com}
pPerson.age = 40
person.name = "Jerry"
fmt.Println(person) //输出 {Jerry 40 tom@gmail.com}
}
type rect struct {
width, height int
}
func (r *rect) area() int { //求面积
return r.width * r.height
}
func (r *rect) perimeter() int{ //求周长
return 2*(r.width + r.height)
}
func main() {
r := rect{width: 10, height: 15}
fmt.Println("面积: ", r.area())
fmt.Println("周长: ", r.perimeter())
rp := &r
fmt.Println("面积: ", rp.area())
fmt.Println("周长: ", rp.perimeter())
}
//---------- 接 口 --------//
type shape interface {
area() float64 //计算面积
perimeter() float64 //计算周长
}
//--------- 长方形 ----------//
type rect struct {
width, height float64
}
func (r *rect) area() float64 { //面积
return r.width * r.height
}
func (r *rect) perimeter() float64 { //周长
return 2*(r.width + r.height)
}
//----------- 圆 形 ----------//
type circle struct {
radius float64
}
func (c *circle) area() float64 { //面积
return math.Pi * c.radius * c.radius
}
func (c *circle) perimeter() float64 { //周长
return 2 * math.Pi * c.radius
}
// ----------- 接口的使用 -----------//
func interface_test() {
r := rect {width:2.9, height:4.8}
c := circle {radius:4.3}
s := []shape{&r, &c} //通过指针实现
for _, sh := range s {
fmt.Println(sh)
fmt.Println(sh.area())
fmt.Println(sh.perimeter())
}
}
package main
import "fmt"
import "errors"
//自定义的出错结构
type myError struct {
arg int
errMsg string
}
//实现Error接口
func (e *myError) Error() string {
return fmt.Sprintf("%d - %s", e.arg, e.errMsg)
}
//两种出错
func error_test(arg int) (int, error) {
if arg < 0 {
return -1, errors.New("Bad Arguments - negtive!")
}else if arg >256 {
return -1, &myError{arg, "Bad Arguments - too large!"}
}
return arg*arg, nil
}
//相关的测试
func main() {
for _, i := range []int{-1, 4, 1000} {
if r, e := error_test(i); e != nil {
fmt.Println("failed:", e)
} else {
fmt.Println("success:", r)
}
}
}
func CopyFile(dstName, srcName string) (written int64, err error) {
src, err := os.Open(srcName)
if err != nil {
return
}
dst, err := os.Create(dstName)
if err != nil {
return
}
written, err = io.Copy(dst, src)
dst.Close()
src.Close()
return
}
func CopyFile(dstName, srcName string) (written int64, err error) {
src, err := os.Open(srcName)
if err != nil {
return
}
defer src.Close()
dst, err := os.Create(dstName)
if err != nil {
return
}
defer dst.Close()
return io.Copy(dst, src)
}
var user = os.Getenv("USER")
func init() {
if user == "" {
panic("no value for $USER")
}
}
func g(i int) {
if i>1 {
fmt.Println("Panic!")
panic(fmt.Sprintf("%v", i))
}
}
func f() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
}
}()
for i := 0; i < 4; i++ {
fmt.Println("Calling g with ", i)
g(i)
fmt.Println("Returned normally from g.")
}
}
func main() {
f()
fmt.Println("Returned normally from f.")
}
Calling g with 0 Returned normally from g. Calling g with 1 Returned normally from g. Calling g with 2 Panic! Recovered in f 2 Returned normally from f
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有