Develop a Golang program that simulates a basic vending machine with the following functionalities:
   - Accepts coins as input and keeps track of the total amount inserted.
   - Displays a list of available products with their prices.
   - Allows the user to select a product, and dispenses it if enough money has been inserted.

Here's a simple Golang program that simulates a basic vending machine:

```go
package main

import (
	"fmt"
)

type Product struct {
	Name  string
	Price int
}

func main() {
	products := []Product{
		{Name: "Coke", Price: 100},
		{Name: "Pepsi", Price: 100},
		{Name: "Sprite", Price: 110},
		{Name: "Water", Price: 90},
	}

	var totalAmount int
	for {
		fmt.Println("Please insert coins (10, 20, 50, or 100). Type -1 to stop inserting:")
		var coin int
		fmt.Scan(&coin)
		if coin == -1 {
			break
		}
		totalAmount += coin
		fmt.Printf("Total amount inserted: %d\n", totalAmount)
	}

	fmt.Println("\nAvailable products:")
	for i, product := range products {
		fmt.Printf("%d. %s - %d\n", i+1, product.Name, product.Price)
	}

	fmt.Print("\nEnter the number of the product you want to buy: ")
	var choice int
	fmt.Scan(&choice)

	selectedProduct := products[choice-1]
	if totalAmount >= selectedProduct.Price {
		change := totalAmount - selectedProduct.Price
		fmt.Printf("\nDispensing %s. Your change is %d.\n", selectedProduct.Name, change)
	} else {
		fmt.Println("\nInsufficient funds. Please insert more coins.")
	}
}
```

This program does the following:
1. Defines a `Product` struct with `Name` and `Price` fields.
2. Initializes an array of available products.
3. Accepts coins as input and keeps track of the total amount inserted until the user types `-1`.
4. Displays a list of available products with their prices.
5. Allows the user to select a product by entering its number.
6. Dispenses the selected product if enough money has been inserted, and calculates the change.

To run this program, save it as `vending_machine.go` and execute `go run vending_machine.go` in your terminal.