golang语言

切片的声明

slice添加元素的方法使用:(append返回一个更改过的切片slice)
slice=append(slice,4,5,6,7)

切片的声明第一种方法:
var a []int  //只是声明,未初始化
//a[0]=99 //此处报错,未初始化  panic: runtime error: index out of range
if a==nil{
fmt.Println("a==nil")    //会打印出来,初始值未nil
}
a=append(a,9)  //不会报错

切片的声明第二种方法:
var b =[]int{}  //声明并初始化
if b==nil{
fmt.Println("b==nil")  //不会打印出来
}
b[0]=99    //此处报错,panic: runtime error: index out of range

切片的声明第三种方法:
c:=make([]int,0)
//c[0]=9   //此处报错,panic: runtime error: index out of range
if c==nil{
fmt.Println("c==nil")  //不会打印出来
}

 

切片关于...(三个点)用法

两个切片的合并
// 创建两个切片,并分别用两个整数进行初始化 
s1 := []int{1, 2} 
s2 := []int{3, 4} 
// 将两个切片追加在一起,并显示结果 
fmt.Printf("%v\n", append(s1, s2...)) 
Output: 
[1 2 3 4]

内置函数 append 也是一个可变参数的函数。这意味着可以在一次调用传递多个追加的值。
如果使用...运算符,可以将一个切片的所有元素追加到另一个切片里

...(三个点)可以使切片展开

切片的删除操作

切片没有删除操作,可以使用append来达到删除的目的

slice_delete(a,3)
fmt.Println("执行删除后的结果:",a)  //调用函数来删除slice的元素

func slice_delete(s []int,index int)(a []int){
a=append(s[:index], s[index+1:]...)  //如果使用...运算符,可以将一个切片的所有元素追加到另一个切片里.只是限于append
return a
}

struct关于结构体(类)的使用,和类构造方法和类一般方法

//利用结构体实现类的功能

//包括类的方法和类的构造函数
//不能给其他包里的类型添加方法,可以使用类型别名的方法变通的添加方法

package main

//利用结构体实现类的功能
//包括类的方法和类的构造函数
//不能给其他包里的类型添加方法,可以使用类型别名的方法变通的添加方法
import "fmt"

//不能给其他包里的类型添加方法,可以使用类型别名的方法变通的添加方法
type myint int //类型的别名
func (i myint) say() {
	fmt.Println("hiiiii")
}

type Person struct {
	name, city string
	age        int8
}

// 类的构造函数
func NewPerson(name, city string, age int8) *Person {
	return &Person{
		name: name,
		city: city,
		age:  age,
	}
}

// 定义一个类方法,(p Person)是一个接收者(只是一个值的接收者,不是指针类型接收者),类似 .self
func (p Person) Dream(aa ...string) {
	fmt.Printf("名字是:%s,年龄:%d\n", p.name, p.age)
	if aa == nil {
		fmt.Println("类方法接收的参数为空")
	} else {
		fmt.Printf("类方法接收的参数为:%s\n", aa)
		fmt.Printf("类方法接收的参数类型为:%T\n", aa)
	}

}

// 定义一个类方法,(p Person)是一个指针类型接收者
func (p *Person) SetAge(age int8) {
	p.age = age
}

func main() {
	p := NewPerson("tom", "nj", 12)
	(*p).Dream() //按道理来说NewPerson构造函数返回的是一个指针类型,所以应该由一个指针来接收
	p.Dream()    //go语言做了优化,两种方法都可以
	p.Dream("nihao", "uuuuuuu")

	fmt.Println(p.age)
	p.SetAge(20)
	fmt.Println("修改后的年龄:", p.age)
}


G:\go>go run struct_2_method.go
名字是:tom,年龄:12
类方法接收的参数为空
名字是:tom,年龄:12
类方法接收的参数为空
名字是:tom,年龄:12
类方法接收的参数为:[nihao uuuuuuu]
类方法接收的参数类型为:[]string
12
修改后的年龄: 20

指针操作

a := 1   //一般的赋值操作

b := &a  // 取a的地址,赋值给b
fmt.Println(b)   // 打印出一个地址  0xc00005480
fmt.Println(*b) //指针是取内存地址中存储的值,   打印出0xc00005480地址存储的值:1

 

package main

import "fmt"

func main() {
	a := 1
	fmt.Println(a)
	b := &a
	fmt.Println(b)
	fmt.Println(*b) //指针是取内存地址中存储的值
	fmt.Printf("%v %p\n", a, &a)

	s := []int{1, 2, 3, 4, 5, 6, 7, 8}
	ss := &s
	fmt.Println(s)
	fmt.Println(ss)
	fmt.Println(*ss)
	fmt.Println(&s[0], &s[1], &s[2], &s[7])

	//new make
	n := "hello world!!!"
	fmt.Println(n)
	fmt.Println(&n)
	fmt.Println(*&n)

	var arrp *[10]string
	arr := [10]string{"q", "w", "e", "r"}
	arrp = &arr
	//arrpp:=&arr
	fmt.Println(arrp)
	for k, _ := range arr {
		fmt.Println(&arr[k])
	}
}



G:\go>go run zhizhen.go
1
0xc000054080
1
1 0xc000054080
[1 2 3 4 5 6 7 8]
&[1 2 3 4 5 6 7 8]
[1 2 3 4 5 6 7 8]
0xc00006c080 0xc00006c088 0xc00006c090 0xc00006c0b8
hello world!!!
0xc0000401c0
hello world!!!
&[q w e r      ]
0xc00004e0a0
0xc00004e0b0
0xc00004e0c0
0xc00004e0d0
0xc00004e0e0
0xc00004e0f0
0xc00004e100
0xc00004e110
0xc00004e120
0xc00004e130

time

package main

import "fmt"
import "time"

func main() {
	fmt.Println(time.Now())
	now := time.Now().Unix()
	now2 := time.Now().UnixNano()
	fmt.Println(now2)
	fmt.Println(now)
	time.Sleep(1 * time.Second)
	fmt.Println(time.Now())
	//                               Y   M  D  h  m  S
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))

}

使用map类型实现wordcount

package main

import "fmt"
import "strings"

func main() {
	s := "how do you do"
	wrodcount := make(map[string]int, 10)
	txt := strings.Split(s, " ") //字符串分割,返回切片 只有首字母大写才能被跨包引用
	for _, word := range txt {
		v, ok := wrodcount[word]
		if ok {
			wrodcount[word] = v + 1
		} else {
			wrodcount[word] = 1
		}
	}

	for k, v := range wrodcount {
		fmt.Println(k, v)
	}
}

 

 

 

 

 

 

 

 

 

 

发布了22 篇原创文章 · 获赞 1 · 访问量 2096
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览