Go基础(1)
基本的概念语法就不写了,直接上代码和分析
demo1:
package add var name string = "hello world" var age int = 10
package main import ( "demo/test/day2/example2/add" "fmt" ) func main() { fmt.println("name:", add.name) fmt.println("age:", add.age) }
分析:
1.调包,需要写gopath目录下src目录之后的路径
比如我电脑的gopath:d:\project\go_project
我的add包目录:d:\project\go_project\src\demo\test\day2\example2\add
2.一个文件夹里面只能有一个包,最好同名
3.main函数必须在main包中
4.private变量小写首字母,public变量大写首字母即可
demo2:
package add var name string = "test" var age int = 666 func init() { name = "hello world!" age = 10 }
package main import ( a "demo/test/day2/example3/add" "fmt" ) func main() { fmt.println("name:", a.name) fmt.println("age:", a.age) }
分析:
1.导入的包可以取别名,比如我这里的a
2.init函数在初始赋值后执行,所以这里应该输出的是helloworld和10
demo3:
package main import ( "fmt" ) func modify(a int) { a = 10 return } func modity(a *int) { *a = 10 return } func main() { a := 5 b := make(chan int, 1) fmt.println("a =", a) fmt.println("b =", b) modify(a) fmt.println("a =", a) modity(&a) fmt.println("a =", a) }
分析:
1.依次输出:a = 5,b = 0xc0000160e0,a = 5,a = 10
2.理解修改地址和修改引用的区别
demo4:
package main import "fmt" func swap(a *int, b *int) { temp := *a *a = *b *b = temp return } func go_swap(a int, b int) (int, int) { return b, a } func main() { three := 3 four := 4 swap(&three, &four) fmt.println("---swap---") fmt.println("three =", three) fmt.println("four =", four) three, four = go_swap(three, four) fmt.println("---swap---") fmt.println("three =", three) fmt.println("four =", four) }
分析:
1.两种交换都是正确的
2.理解传统c语言交换函数以及多返回值形式的交换函数
demo5:
package main import ( "fmt" "math/rand" "time" ) func init() { rand.seed(time.now().unixnano()) } func main() { fmt.println("---generate random number---") fmt.println("--int---") for i := 0; i < 3; i++ { a := rand.int() fmt.println(a) } fmt.println("---int(100)---") for i := 0; i < 3; i++ { a := rand.intn(100) fmt.println(a) } fmt.println("---float32---") for i := 0; i < 3; i++ { a := rand.float32() fmt.println(a) } }
分析:
1.简单的随机数生产程序,学会rand和time的基本使用
2.根据当前的精确时间给rand一个种子,保证随机的不确定性
demo6:
package main import "fmt" func reverse1(str string) string { var result string strlen := len(str) for i := 0; i < strlen; i++ { result += fmt.sprintf("%c", str[strlen-i-1]) } return result } func reverse2(str string) string { var result []byte tmp := []byte(str) lenth := len(str) for i := 0; i < lenth; i++ { result = append(result, tmp[lenth-i-1]) } return string(result) } func main() { str := "hello world!" result := reverse2(str) fmt.printf("str:%s\nresult:%s\n", str, result) }
分析:
1.反转字符串的两种形式
demo7:
package main import ( "fmt" "math" ) func main() { min := 1 max := 100 for i := min; i <= max; i++ { var flag bool = true if i == 1 { flag = false } for j := 2; j <= int(math.sqrt(float64(i))); j++ { if i%j == 0 { flag = false break } } if flag { fmt.printf("%d是素数\n", i) } } }
分析:
1.求1-100的所有质数
2.注意求指数过程优化,除数最大达到根号被除数即可
demo8:
package main import ( "fmt" "strconv" ) func main() { min := 1 max := 1000 for i := min; i <= max; i++ { if isnarcissisticnumber(i) { fmt.printf("%d是水仙花数\n", i) } } } func isnarcissisticnumber(n int) bool { tmp := strconv.itoa(n) data := []byte(tmp) lenth := len(data) var result int = 0 for i := 0; i < lenth; i++ { number, _ := strconv.atoi(string(data[i])) result += number * number * number } if n == result { return true } else { return false } }
分析:
1.求水仙花数的一种实现
2.这里的atoi是多返回值函数,用不到的返回值用“_”代替即可
3.这里是字符串处理的方式实现,还可以用除10的数学方式实现
demo9:
package main import "fmt" func main() { fmt.println(factorial(5)) } func factorial(n uint) uint { if n == 0 { return 1 } if n == 1 { return n } return n * factorial(n-1) }
分析:
1.利用递归实现阶乘,是比较优秀的实现方式
上一篇: css公共库——简介中超过长度显示省略号
下一篇: unity list循环